home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / tempest.c < prev    next >
C/C++ Source or Header  |  2000-05-13  |  19KB  |  510 lines

  1. /***************************************************************************
  2.  
  3.      TEMPEST
  4.      -------
  5.      HEX        R/W   D7 D6 D5 D4 D3 D2 D2 D0  function
  6.      0000-07FF  R/W   D  D  D  D  D  D  D  D   program ram (2K)
  7.      0800-080F   W                D  D  D  D   Colour ram
  8.  
  9.      0C00        R                         D   Right coin sw
  10.      0C00        R                      D      Center coin sw
  11.      0C00        R                   D         Left coin sw
  12.      0C00        R                D            Slam sw
  13.      0C00        R             D               Self test sw
  14.      0C00        R          D                  Diagnostic step sw
  15.      0C00        R       D                     Halt
  16.      0C00        R    D                        3khz ??
  17.      0D00        R    D  D  D  D  D  D  D  D   option switches
  18.      0E00        R    D  D  D  D  D  D  D  D   option switches
  19.  
  20.      2000-2FFF  R/W   D  D  D  D  D  D  D  D   Vector Ram (4K)
  21.      3000-3FFF   R    D  D  D  D  D  D  D  D   Vector Rom (4K)
  22.  
  23.      4000        W                         D   Right coin counter
  24.      4000        W                      D      left  coin counter
  25.      4000        W                D            Video invert - x
  26.      4000        W             D               Video invert - y
  27.      4800        W                             Vector generator GO
  28.  
  29.      5000        W                             WD clear
  30.      5800        W                             Vect gen reset
  31.  
  32.      6000-603F   W    D  D  D  D  D  D  D  D   EAROM write
  33.      6040        W    D  D  D  D  D  D  D  D   EAROM control
  34.      6040        R    D                        Mathbox status
  35.      6050        R    D  D  D  D  D  D  D  D   EAROM read
  36.  
  37.      6060        R    D  D  D  D  D  D  D  D   Mathbox read
  38.      6070        R    D  D  D  D  D  D  D  D   Mathbox read
  39.      6080-609F   W    D  D  D  D  D  D  D  D   Mathbox start
  40.  
  41.      60C0-60CF  R/W   D  D  D  D  D  D  D  D   Custom audio chip 1
  42.      60D0-60DF  R/W   D  D  D  D  D  D  D  D   Custom audio chip 2
  43.  
  44.      60E0        R                         D   one player start LED
  45.      60E0        R                      D      two player start LED
  46.      60E0        R                   D         FLIP
  47.  
  48.      9000-DFFF  R     D  D  D  D  D  D  D  D   Program ROM (20K)
  49.  
  50.      notes: program ram decode may be incorrect, but it appears like
  51.      this on the schematics, and the troubleshooting guide.
  52.  
  53.      ZAP1,FIRE1,FIRE2,ZAP2 go to pokey2 , bits 3,and 4
  54.      (depending on state of FLIP)
  55.      player1 start, player2 start are pokey2 , bits 5 and 6
  56.  
  57.      encoder wheel goes to pokey1 bits 0-3
  58.      pokey1, bit4 is cocktail detect
  59.  
  60.  
  61. TEMPEST SWITCH SETTINGS (Atari, 1980)
  62. -------------------------------------
  63.  
  64.  
  65. GAME OPTIONS:
  66. (8-position switch at L12 on Analog Vector-Generator PCB)
  67.  
  68. 1   2   3   4   5   6   7   8   Meaning
  69. -------------------------------------------------------------------------
  70. Off Off                         2 lives per game
  71. On  On                          3 lives per game
  72. On  Off                         4 lives per game
  73. Off On                          5 lives per game
  74.         On  On  Off             Bonus life every 10000 pts
  75.         On  On  On              Bonus life every 20000 pts
  76.         On  Off On              Bonus life every 30000 pts
  77.         On  Off Off             Bonus life every 40000 pts
  78.         Off On  On              Bonus life every 50000 pts
  79.         Off On  Off             Bonus life every 60000 pts
  80.         Off Off On              Bonus life every 70000 pts
  81.         Off Off Off             No bonus lives
  82.                     On  On      English
  83.                     On  Off     French
  84.                     Off On      German
  85.                     Off Off     Spanish
  86.                             On  1-credit minimum
  87.                             Off 2-credit minimum
  88.  
  89.  
  90. GAME OPTIONS:
  91. (4-position switch at D/E2 on Math Box PCB)
  92.  
  93. 1   2   3   4                   Meaning
  94. -------------------------------------------------------------------------
  95.     Off                         Minimum rating range: 1, 3, 5, 7, 9
  96.     On                          Minimum rating range tied to high score
  97.         Off Off                 Medium difficulty (see notes)
  98.         Off On                  Easy difficulty (see notes)
  99.         On  Off                 Hard difficulty (see notes)
  100.         On  On                  Medium difficulty (see notes)
  101.  
  102.  
  103. PRICING OPTIONS:
  104. (8-position switch at N13 on Analog Vector-Generator PCB)
  105.  
  106. 1   2   3   4   5   6   7   8   Meaning
  107. -------------------------------------------------------------------------
  108. On  On  On                      No bonus coins
  109. On  On  Off                     For every 2 coins, game adds 1 more coin
  110. On  Off On                      For every 4 coins, game adds 1 more coin
  111. On  Off Off                     For every 4 coins, game adds 2 more coins
  112. Off On  On                      For every 5 coins, game adds 1 more coin
  113. Off On  Off                     For every 3 coins, game adds 1 more coin
  114. On  Off                 Off On  Demonstration Mode (see notes)
  115. Off Off                 Off On  Demonstration-Freeze Mode (see notes)
  116.             On                  Left coin mech * 1
  117.             Off                 Left coin mech * 2
  118.                 On  On          Right coin mech * 1
  119.                 On  Off         Right coin mech * 4
  120.                 Off On          Right coin mech * 5
  121.                 Off Off         Right coin mech * 6
  122.                         Off On  Free Play
  123.                         Off Off 1 coin 2 plays
  124.                         On  On  1 coin 1 play
  125.                         On  Off 2 coins 1 play
  126.  
  127.  
  128. GAME SETTING NOTES:
  129. -------------------
  130.  
  131. Demonstration Mode:
  132. - Plays a normal game of Tempest, but pressing SUPERZAP sends you
  133.   directly to the next level.
  134.  
  135. Demonstration-Freeze Mode:
  136. - Just like Demonstration Mode, but with frozen screen action.
  137.  
  138. Both Demonstration Modes:
  139. - Pressing RESET in either mode will cause the game to lock up.
  140.   To recover, set switch 1 to On.
  141. - You can start at any level from 1..81, so it's an easy way of
  142.   seeing what the game can throw at you
  143. - The score is zeroed at the end of the game, so you also don't
  144.   have to worry about artificially high scores disrupting your
  145.   scoring records as stored in the game's EAROM.
  146.  
  147. Easy Difficulty:
  148. - Enemies move more slowly
  149. - One less enemy shot on the screen at any given time
  150.  
  151. Hard Difficulty:
  152. - Enemies move more quickly
  153. - 1-4 more enemy shots on the screen at any given time
  154. - One more enemy may be on the screen at any given time
  155.  
  156. High Scores:
  157. - Changing toggles 1-5 at L12 (more/fewer lives, bonus ship levels)
  158.   will erase the high score table.
  159. - You should also wait 8-10 seconds after a game has been played
  160.   before entering self-test mode or powering down; otherwise, you
  161.   might erase or corrupt the high score table.
  162.  
  163. ***************************************************************************/
  164.  
  165. #include "driver.h"
  166. #include "vidhrdw/generic.h"
  167. #include "machine/mathbox.h"
  168. #include "vidhrdw/avgdvg.h"
  169. #include "vidhrdw/vector.h"
  170. #include "machine/atari_vg.h"
  171.  
  172.  
  173. static READ_HANDLER( tempest_IN0_r )
  174. {
  175.     int res;
  176.  
  177.     res = readinputport(0);
  178.  
  179.     if (avgdvg_done())
  180.         res|=0x40;
  181.  
  182.     /* Emulate the 3Khz source on bit 7 (divide 1.5Mhz by 512) */
  183.     if (cpu_gettotalcycles() & 0x100)
  184.         res |=0x80;
  185.  
  186.     return res;
  187. }
  188.  
  189. static WRITE_HANDLER( tempest_led_w )
  190. {
  191.     osd_led_w (0, ~(data >> 1));
  192.     osd_led_w (1, ~data);
  193.     /* FLIP is bit 0x04 */
  194. }
  195.  
  196. static WRITE_HANDLER( tempest_coin_w )
  197. {
  198.     static int lastval;
  199.  
  200.     if (lastval == data) return;
  201.     coin_counter_w (0, (data & 0x01));
  202.     coin_counter_w (1, (data & 0x02));
  203.     coin_counter_w (2, (data & 0x04));
  204.     lastval = data;
  205. }
  206.  
  207. static struct MemoryReadAddress readmem[] =
  208. {
  209.     { 0x0000, 0x07ff, MRA_RAM },
  210.     { 0x0c00, 0x0c00, tempest_IN0_r },    /* IN0 */
  211.     { 0x0d00, 0x0d00, input_port_3_r },    /* DSW1 */
  212.     { 0x0e00, 0x0e00, input_port_4_r },    /* DSW2 */
  213.     { 0x2000, 0x2fff, MRA_RAM },
  214.     { 0x3000, 0x3fff, MRA_ROM },
  215.     { 0x6040, 0x6040, mb_status_r },
  216.     { 0x6050, 0x6050, atari_vg_earom_r },
  217.     { 0x6060, 0x6060, mb_lo_r },
  218.     { 0x6070, 0x6070, mb_hi_r },
  219.     { 0x60c0, 0x60cf, pokey1_r },
  220.     { 0x60d0, 0x60df, pokey2_r },
  221.     { 0x9000, 0xdfff, MRA_ROM },
  222.     { 0xf000, 0xffff, MRA_ROM },    /* for the reset / interrupt vectors */
  223.     { -1 }    /* end of table */
  224. };
  225.  
  226. static struct MemoryWriteAddress writemem[] =
  227. {
  228.     { 0x0000, 0x07ff, MWA_RAM },
  229.     { 0x0800, 0x080f, tempest_colorram_w },
  230.     { 0x2000, 0x2fff, MWA_RAM, &vectorram, &vectorram_size },
  231.     { 0x3000, 0x3fff, MWA_ROM },
  232.     { 0x4000, 0x4000, tempest_coin_w },
  233.     { 0x4800, 0x4800, avgdvg_go_w },
  234.     { 0x5000, 0x5000, watchdog_reset_w },
  235.     { 0x5800, 0x5800, avgdvg_reset_w },
  236.     { 0x6000, 0x603f, atari_vg_earom_w },
  237.     { 0x6040, 0x6040, atari_vg_earom_ctrl_w },
  238.     { 0x6080, 0x609f, mb_go_w },
  239.     { 0x60c0, 0x60cf, pokey1_w },
  240.     { 0x60d0, 0x60df, pokey2_w },
  241.     { 0x60e0, 0x60e0, tempest_led_w },
  242.     { 0x9000, 0xdfff, MWA_ROM },
  243.     { -1 }    /* end of table */
  244. };
  245.  
  246. INPUT_PORTS_START( tempest )
  247.     PORT_START    /* IN0 */
  248.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN3 )
  249.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
  250.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
  251.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_TILT )
  252.     PORT_SERVICE( 0x10, IP_ACTIVE_LOW )
  253.     PORT_BITX( 0x20, IP_ACTIVE_LOW, IPT_SERVICE, "Diagnostic Step", KEYCODE_F1, IP_JOY_NONE )
  254.     /* bit 6 is the VG HALT bit. We set it to "low" */
  255.     /* per default (busy vector processor). */
  256.      /* handled by tempest_IN0_r() */
  257.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  258.     /* bit 7 is tied to a 3khz (?) clock */
  259.      /* handled by tempest_IN0_r() */
  260.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  261.  
  262.     PORT_START    /* IN1/DSW0 */
  263.     /* This is the Tempest spinner input. It only uses 4 bits. */
  264.     PORT_ANALOG( 0x0f, 0x00, IPT_DIAL, 25, 20, 0, 0)
  265.     /* The next one is reponsible for cocktail mode.
  266.      * According to the documentation, this is not a switch, although
  267.      * it may have been planned to put it on the Math Box PCB, D/E2 )
  268.      */
  269.     PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet ) )
  270.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  271.     PORT_DIPSETTING(    0x10, DEF_STR( Cocktail ) )
  272.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  273.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  274.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  275.  
  276.     PORT_START    /* IN2 */
  277.     PORT_DIPNAME(  0x03, 0x03, DEF_STR( Difficulty ) )
  278.     PORT_DIPSETTING(     0x02, "Easy" )
  279.     PORT_DIPSETTING(     0x03, "Medium1" )
  280.     PORT_DIPSETTING(     0x00, "Medium2" )
  281.     PORT_DIPSETTING(     0x01, "Hard" )
  282.     PORT_DIPNAME(  0x04, 0x04, "Rating" )
  283.     PORT_DIPSETTING(     0x04, "1, 3, 5, 7, 9" )
  284.     PORT_DIPSETTING(     0x00, "tied to high score" )
  285.     PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_BUTTON2 )
  286.     PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  287.     PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START1 )
  288.     PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_START2 )
  289.     PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  290.  
  291.     PORT_START    /* DSW1 - (N13 on analog vector generator PCB */
  292.     PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) )
  293.     PORT_DIPSETTING(    0x01, DEF_STR( 2C_1C ) )
  294.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
  295.     PORT_DIPSETTING(    0x03, DEF_STR( 1C_2C ) )
  296.     PORT_DIPSETTING(    0x02, DEF_STR( Free_Play ) )
  297.     PORT_DIPNAME( 0x0c, 0x00, "Right Coin" )
  298.     PORT_DIPSETTING(    0x00, "*1" )
  299.     PORT_DIPSETTING(    0x04, "*4" )
  300.     PORT_DIPSETTING(    0x08, "*5" )
  301.     PORT_DIPSETTING(    0x0c, "*6" )
  302.     PORT_DIPNAME( 0x10, 0x00, "Left Coin" )
  303.     PORT_DIPSETTING(    0x00, "*1" )
  304.     PORT_DIPSETTING(    0x10, "*2" )
  305.     PORT_DIPNAME( 0xe0, 0x00, "Bonus Coins" )
  306.     PORT_DIPSETTING(    0x00, "None" )
  307.     PORT_DIPSETTING(    0x80, "1 each 5" )
  308.     PORT_DIPSETTING(    0x40, "1 each 4 (+Demo)" )
  309.     PORT_DIPSETTING(    0xa0, "1 each 3" )
  310.     PORT_DIPSETTING(    0x60, "2 each 4 (+Demo)" )
  311.     PORT_DIPSETTING(    0x20, "1 each 2" )
  312.     PORT_DIPSETTING(    0xc0, "Freeze Mode" )
  313.     PORT_DIPSETTING(    0xe0, "Freeze Mode" )
  314.  
  315.     PORT_START    /* DSW2 - (L12 on analog vector generator PCB */
  316.     PORT_DIPNAME( 0x01, 0x00, "Minimum" )
  317.     PORT_DIPSETTING(    0x00, "1 Credit" )
  318.     PORT_DIPSETTING(    0x01, "2 Credit" )
  319.     PORT_DIPNAME( 0x06, 0x00, "Language" )
  320.     PORT_DIPSETTING(    0x00, "English" )
  321.     PORT_DIPSETTING(    0x02, "French" )
  322.     PORT_DIPSETTING(    0x04, "German" )
  323.     PORT_DIPSETTING(    0x06, "Spanish" )
  324.     PORT_DIPNAME( 0x38, 0x00, DEF_STR( Bonus_Life ) )
  325.     PORT_DIPSETTING(    0x08, "10000" )
  326.     PORT_DIPSETTING(    0x00, "20000" )
  327.     PORT_DIPSETTING(    0x10, "30000" )
  328.     PORT_DIPSETTING(    0x18, "40000" )
  329.     PORT_DIPSETTING(    0x20, "50000" )
  330.     PORT_DIPSETTING(    0x28, "60000" )
  331.     PORT_DIPSETTING(    0x30, "70000" )
  332.     PORT_DIPSETTING(    0x38, "None" )
  333.     PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Lives ) )
  334.     PORT_DIPSETTING(    0xc0, "2" )
  335.     PORT_DIPSETTING(    0x00, "3" )
  336.     PORT_DIPSETTING(    0x40, "4" )
  337.     PORT_DIPSETTING(    0x80, "5" )
  338. INPUT_PORTS_END
  339.  
  340.  
  341. READ_HANDLER( input_port_1_bit_r ) { return (readinputport(1) & (1 << offset)) ? 0 : 228; }
  342. READ_HANDLER( input_port_2_bit_r ) { return (readinputport(2) & (1 << offset)) ? 0 : 228; }
  343.  
  344. static struct POKEYinterface pokey_interface =
  345. {
  346.     2,    /* 2 chips */
  347.     12096000/8,    /* 1.512 MHz */
  348.     { 50, 50 },
  349.     /* The 8 pot handlers */
  350.     { input_port_1_bit_r, input_port_2_bit_r },
  351.     { input_port_1_bit_r, input_port_2_bit_r },
  352.     { input_port_1_bit_r, input_port_2_bit_r },
  353.     { input_port_1_bit_r, input_port_2_bit_r },
  354.     { input_port_1_bit_r, input_port_2_bit_r },
  355.     { input_port_1_bit_r, input_port_2_bit_r },
  356.     { input_port_1_bit_r, input_port_2_bit_r },
  357.     { input_port_1_bit_r, input_port_2_bit_r },
  358.     /* The allpot handler */
  359.     { 0, 0 },
  360. };
  361.  
  362.  
  363.  
  364. static struct MachineDriver machine_driver_tempest =
  365. {
  366.     /* basic machine hardware */
  367.     {
  368.         {
  369.             CPU_M6502,
  370.             12096000/8,    /* 1.512 MHz */
  371.             readmem,writemem,0,0,
  372.             interrupt,4 /* 4.1ms */
  373.         }
  374.     },
  375.     60, 0,    /* frames per second, vblank duration (vector game, so no vblank) */
  376.     1,
  377.     0,
  378.  
  379.     /* video hardware */
  380.     300, 400, { 0, 550, 0, 580 },
  381.     0,
  382.     256,0,
  383.     avg_init_palette_multi,
  384.  
  385.     VIDEO_TYPE_VECTOR,
  386.     0,
  387.     avg_start_tempest,
  388.     avg_stop,
  389.     vector_vh_screenrefresh,
  390.  
  391.     /* sound hardware */
  392.     0,0,0,0,
  393.     {
  394.         {
  395.             SOUND_POKEY,
  396.             &pokey_interface
  397.         }
  398.     },
  399.  
  400.     atari_vg_earom_handler
  401. };
  402.  
  403.  
  404. /***************************************************************************
  405.  
  406.   Game driver(s)
  407.  
  408. ***************************************************************************/
  409.  
  410. /*
  411.  * Tempest now uses the EAROM routines to load/save scores.
  412.  * Just in case, here is a snippet of the old code:
  413.  * if (memcmp(&RAM[0x0606],"\x07\x04\x01",3))
  414.  *    osd_fread(f,&RAM[0x0600],0x200);
  415.  */
  416.  
  417.  
  418. ROM_START( tempest ) /* rev 3 */
  419.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  420.     ROM_LOAD( "136002.113",   0x9000, 0x0800, 0x65d61fe7 )
  421.     ROM_LOAD( "136002.114",   0x9800, 0x0800, 0x11077375 )
  422.     ROM_LOAD( "136002.115",   0xa000, 0x0800, 0xf3e2827a )
  423.     ROM_LOAD( "136002.316",   0xa800, 0x0800, 0xaeb0f7e9 )
  424.     ROM_LOAD( "136002.217",   0xb000, 0x0800, 0xef2eb645 )
  425.     ROM_LOAD( "136002.118",   0xb800, 0x0800, 0xbeb352ab )
  426.     ROM_LOAD( "136002.119",   0xc000, 0x0800, 0xa4de050f )
  427.     ROM_LOAD( "136002.120",   0xc800, 0x0800, 0x35619648 )
  428.     ROM_LOAD( "136002.121",   0xd000, 0x0800, 0x73d38e47 )
  429.     ROM_LOAD( "136002.222",   0xd800, 0x0800, 0x707bd5c3 )
  430.     ROM_RELOAD(             0xf800, 0x0800 ) /* for reset/interrupt vectors */
  431.     /* Mathbox ROMs */
  432.     ROM_LOAD( "136002.123",   0x3000, 0x0800, 0x29f7e937 )
  433.     ROM_LOAD( "136002.124",   0x3800, 0x0800, 0xc16ec351 )
  434. ROM_END
  435.  
  436. ROM_START( tempest1 ) /* rev 1 */
  437.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  438.     ROM_LOAD( "136002.113",   0x9000, 0x0800, 0x65d61fe7 )
  439.     ROM_LOAD( "136002.114",   0x9800, 0x0800, 0x11077375 )
  440.     ROM_LOAD( "136002.115",   0xa000, 0x0800, 0xf3e2827a )
  441.     ROM_LOAD( "136002.116",   0xa800, 0x0800, 0x7356896c )
  442.     ROM_LOAD( "136002.117",   0xb000, 0x0800, 0x55952119 )
  443.     ROM_LOAD( "136002.118",   0xb800, 0x0800, 0xbeb352ab )
  444.     ROM_LOAD( "136002.119",   0xc000, 0x0800, 0xa4de050f )
  445.     ROM_LOAD( "136002.120",   0xc800, 0x0800, 0x35619648 )
  446.     ROM_LOAD( "136002.121",   0xd000, 0x0800, 0x73d38e47 )
  447.     ROM_LOAD( "136002.122",   0xd800, 0x0800, 0x796a9918 )
  448.     ROM_RELOAD(             0xf800, 0x0800 ) /* for reset/interrupt vectors */
  449.     /* Mathbox ROMs */
  450.     ROM_LOAD( "136002.123",   0x3000, 0x0800, 0x29f7e937 )
  451.     ROM_LOAD( "136002.124",   0x3800, 0x0800, 0xc16ec351 )
  452. ROM_END
  453.  
  454. ROM_START( tempest2 ) /* rev 2 */
  455.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  456.     ROM_LOAD( "136002.113",   0x9000, 0x0800, 0x65d61fe7 )
  457.     ROM_LOAD( "136002.114",   0x9800, 0x0800, 0x11077375 )
  458.     ROM_LOAD( "136002.115",   0xa000, 0x0800, 0xf3e2827a )
  459.     ROM_LOAD( "136002.116",   0xa800, 0x0800, 0x7356896c )
  460.     ROM_LOAD( "136002.217",   0xb000, 0x0800, 0xef2eb645 )
  461.     ROM_LOAD( "136002.118",   0xb800, 0x0800, 0xbeb352ab )
  462.     ROM_LOAD( "136002.119",   0xc000, 0x0800, 0xa4de050f )
  463.     ROM_LOAD( "136002.120",   0xc800, 0x0800, 0x35619648 )
  464.     ROM_LOAD( "136002.121",   0xd000, 0x0800, 0x73d38e47 )
  465.     ROM_LOAD( "136002.222",   0xd800, 0x0800, 0x707bd5c3 )
  466.     ROM_RELOAD(             0xf800, 0x0800 ) /* for reset/interrupt vectors */
  467.     /* Mathbox ROMs */
  468.     ROM_LOAD( "136002.123",   0x3000, 0x0800, 0x29f7e937 )
  469.     ROM_LOAD( "136002.124",   0x3800, 0x0800, 0xc16ec351 )
  470. ROM_END
  471.  
  472. ROM_START( temptube )
  473.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  474.     ROM_LOAD( "136002.113",   0x9000, 0x0800, 0x65d61fe7 )
  475.     ROM_LOAD( "136002.114",   0x9800, 0x0800, 0x11077375 )
  476.     ROM_LOAD( "136002.115",   0xa000, 0x0800, 0xf3e2827a )
  477.     ROM_LOAD( "136002.316",   0xa800, 0x0800, 0xaeb0f7e9 )
  478.     ROM_LOAD( "136002.217",   0xb000, 0x0800, 0xef2eb645 )
  479.     ROM_LOAD( "tube.118",     0xb800, 0x0800, 0xcefb03f0 )
  480.     ROM_LOAD( "136002.119",   0xc000, 0x0800, 0xa4de050f )
  481.     ROM_LOAD( "136002.120",   0xc800, 0x0800, 0x35619648 )
  482.     ROM_LOAD( "136002.121",   0xd000, 0x0800, 0x73d38e47 )
  483.     ROM_LOAD( "136002.222",   0xd800, 0x0800, 0x707bd5c3 )
  484.     ROM_RELOAD(             0xf800, 0x0800 ) /* for reset/interrupt vectors */
  485.     /* Mathbox ROMs */
  486.     ROM_LOAD( "136002.123",   0x3000, 0x0800, 0x29f7e937 )
  487.     ROM_LOAD( "136002.124",   0x3800, 0x0800, 0xc16ec351 )
  488. ROM_END
  489.  
  490. #if 0 /* identical to rom_tempest, only different rom sizes */
  491. ROM_START( tempest3 )
  492.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  493.     ROM_LOAD( "tempest.x",    0x9000, 0x1000, 0x0 )
  494.     ROM_LOAD( "tempest.1",    0xa000, 0x1000, 0x0 )
  495.     ROM_LOAD( "tempest.3",    0xb000, 0x1000, 0x0 )
  496.     ROM_LOAD( "tempest.5",    0xc000, 0x1000, 0x0 )
  497.     ROM_LOAD( "tempest.7",    0xd000, 0x1000, 0x0 )
  498.     ROM_RELOAD(            0xf000, 0x1000 )    /* for reset/interrupt vectors */
  499.     /* Mathbox ROMs */
  500.     ROM_LOAD( "tempest.np3",  0x3000, 0x1000, 0x0 )
  501. ROM_END
  502. #endif
  503.  
  504.  
  505.  
  506. GAME( 1980, tempest,  0,       tempest, tempest, 0, ROT0, "Atari", "Tempest (rev 3)" )
  507. GAME( 1980, tempest1, tempest, tempest, tempest, 0, ROT0, "Atari", "Tempest (rev 1)" )
  508. GAME( 1980, tempest2, tempest, tempest, tempest, 0, ROT0, "Atari", "Tempest (rev 2)" )
  509. GAME( 1980, temptube, tempest, tempest, tempest, 0, ROT0, "hack", "Tempest Tubes" )
  510.